在上一篇文章中,我們講解了 MongoDB 的基本操作,接下來想講講如何更有效率的查詢想要找的資料
就是查詢的條件只要部分符合就可以找到了,不用查找的關鍵字完全正確,我們直接來舉個例子比較好理解
先假設有以下這些資料
{
'item':'book1',
'value':300
},
{
'item':'book2',
'value':200
},
{
'item':'table',
'value':6000
}
模糊查詢,查找的資料 item
值內有包含 book
就返回
mycol.find({'item':{'$regex':'book'}})
這樣就會找到
{
'item':'book1',
'value':300
},
{
'item':'book2',
'value':200
}
這兩筆資料了,因為 'book1'
和 'book2'
都包含 book
這個方法可以根據資料內某個值大於或小於某個值來查找資料,比方說我想找 value
大於 200 的資料就可以像這樣
mycol.find({'value':{'$gte':200}})
這樣就會找到
{
'item':'book1',
'value':300
},
{
'item':'table',
'value':6000
}
這樣就會找到這些資料
有時候我們想讓找到的資料根據 document 內某個資料的數值來排序,可以用 sort
這個方法
mycol.find({'value':{'$gte':200}}).sort('value',-1)
這樣會是 value
數值大的排在前面
{
'item':'table',
'value':6000
},
{
'item':'book1',
'value':300
}
反之
mycol.find({'value':{'$gte':200}}).sort('value',1)
會是 value
數值小的排在前面
{
'item':'book1',
'value':300
},
{
'item':'table',
'value':6000
}
隨著資料的增長,有時候我們會怕找到符合的資料太多,拖慢效能,會去限制最多找到多少 document
用 limit
這個功能去限制最多返回多少個 document
mycol.find({}).limit(10)
咦,這樣不就有些資料沒找到了嗎?別急下面我們馬上就會講了
我們可以在查詢資料的時候使用忽略前幾筆資料和限制只返回多少筆資料來做到分頁的效果
用 skip
做忽略
mycol.find({}).skip(10)
用 skip
和 limit
做到分頁效果
mycol.find({}).skip(10).limit(10)
在實務上後端會接收一個第幾頁的參數,來決定返回哪一部分的資料
pageNumber=request.GET['pageNumber']
nPerPage=10
data=mycol.find({}).skip(( pageNumber - 1 ) * nPerPage).limit(nPerPage)